package com.mh.common.core.domain;

import java.io.Serializable;

//BaseResp<T>中的<T> 类型占位符-->返回的数据类型不是确定的,可以使用泛型
public class BaseResp<T> implements Serializable { //响应结果封装对象

    private static final long serialVersionUID = -572083536107011638L;

    //响应状态码-->对应枚举类属性
    private String code;
    //响应结果描述-->对应枚举类属性
    private String msg;
    //是否成功
    private Boolean success;
    //返回的数据类型-->BaseResp指定的泛型T,同BaseResp接收的类型
    private T data;


    //set(),get()
    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public T getData() {
        return data;
    }

    public void setData(T data) {
        this.data = data;
    }
    public Boolean getSuccess() {
        return success;
    }
    public void setSuccess(Boolean success) {
        this.success = success;
    }

    //成功返回-->封装成功状态码+描述信息
    //泛型方法允许方法在调用时接受不同类型的参数,并且可以在编译时保证类型安全
    public static <T> BaseResp<T> success(T data) { //传入的是什么类型那就是什么类型
        BaseResp<T> resp = new BaseResp<T>();
        resp.setCode(ResultCode.SUCCESS.getCode()); //设置成功码: 在自定义枚举类中获取成功的状态码
        resp.setMsg(ResultCode.SUCCESS.getMsg()); //设置成功信息: 在自定义枚举类中获取成功的描述信息
        resp.setSuccess(true);
        resp.setData(data); //状态码+描述信息赋值给 BaseResp<T> resp

        return resp; //BaseResp<T> resp
    }

    //异常返回-->封装异常状态码+描述信息
    public static <T> BaseResp<T> error(String msg) {
        BaseResp<T> resp = new BaseResp<T>();
        resp.setCode(ResultCode.ERROR.getCode());
        resp.setMsg(msg);

        return resp;
    }

    //异常返回-->封装异常状态码+描述信息
    public static <T> BaseResp<T> error(String code,String msg) {
        BaseResp<T> resp = new BaseResp<T>();
        resp.setCode(code);
        resp.setMsg(msg);

        return resp;
    }

    //异常返回-->封装异常状态码+描述信息+是否返回
    public static <T> BaseResp<T> error(String code,String msg, Boolean success) {
        BaseResp<T> resp = new BaseResp<T>();
        resp.setCode(code);
        resp.setMsg(msg);
        resp.setSuccess(success);

        return resp;
    }

    public BaseResp(String code, String msg, Boolean success) {
        this.code = code;
        this.msg = msg;
        this.success = success;
    }

    public BaseResp(String code, String msg, T data, Boolean success) {
        this.code = code;
        this.msg = msg;
        this.success = success;
        this.data = data;
    }

    public BaseResp() {
    }
}
